// PROGRAMA : IDCPE006 OPCAO: 'CES'
// BIBLIOTECA : PRODETR
// SISTEMA : INFORMACOES DE SEGURANCA PUBLICA - SISP
// CLIENTE : SEJUSP - SEC. DA JUSTICA E SEGURANCA PUBLICA
// INSTITUTO DE IDENTIFICACAO
// PROGRAMADOR : BRUNO LOPES / EDNA PINTO DATA: 28/01/98
// OBJETIVO : EMITIR HISTORICO DE EMISSOES DE
// IDENTIDADE POR PERIODO E USUARIO.
// : ALTERACAO DA TELA E DATAS (N6) PARA (N8)
// OBS : PARA O SHOPPING DO CIDADAO

package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.text.ParseException;
import java.util.Arrays;

import net.sf.jasperreports.engine.JRException;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.interceptor.download.InputStreamDownload;
import br.com.vti.sisp_sicrim.antigo.controller.relatorios.Idcpe006Report;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Idcpe006A;
import br.com.vti.sisp_sicrim.antigo.model.DidEmissao;
import br.com.vti.sisp_sicrim.antigo.model.SicEstatistica;
import br.com.vti.sisp_sicrim.antigo.model.SicTabelas;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Idcpe006 OBJETIVO : EMITIR HISTORICO DE EMISSOES DE IDENTIDADE POR PERIODO E USUARIO. *
 * 
 * @author Incode - Data: mai/2014
 * 
 */

@Resource
@Path("/antigo/idcpe006")
public class Idcpe006 {
	Idcpe006 idcpe006Anterior;
	private String faseproc = "0";
	// Views utilizadas
	SicEstatistica vwCadest = new SicEstatistica();
	DidEmissao vwEmissao = new DidEmissao();
	SicTabelas vwTabele = new SicTabelas();
	// Telas/relatorios utilizados
	Idcpe006A idcpe006A;
	Idcpe006Report report;
	// Areas globais / session
	Sisgsisp sisgsisp; // Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();
	
	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;

	// private int jUsuario = 0;
	private int jCont = 0;
	private String[] tabm = { "", "   ", "VEI", "CON", "MUL", "   ", "IPV", "ROU", "   ", "   ", "   ", "   ", "   ", "IDC", "ICR", "FUN", "   ", "   " };

	private Idcpe006A preMapas() {
		idcpe006A = new Idcpe006A(true, sessao);
		Arrays.fill(tabm, "");
		idcpe006A.setDataCorrente(UtilBean.inverteDataCorrente());
		// Par�grafo: rp0()
		return idcpe006A;
	}

	public Idcpe006(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public InputStreamDownload executar(Idcpe006A idcpe006A) {
		try {
			return main(idcpe006A);
		} catch (Exception e) {
			throw new ExceptionProgram(e, sessao, this.getClass().getSimpleName());
		}
	}

	private InputStreamDownload main(Idcpe006A pidcpe006A) throws Exception {
		if (pidcpe006A == null) {
			primeiraVez = true;
			// idcpe006A = new Idcpe006A (primeiraVez);
			idcpe006A = preMapas();
			idcpe006A.setNavegar("../idcpe006/executar");
			result.include("idcpe006A", idcpe006A);
			sessao.setAtributo("Idcpe006", this);
			idcpe006A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		} else {
			restaurarEstados(pidcpe006A);
		}

		// //DEFINE PRINTER(EMF = 1)
		// RELATORIO EMF PS=60 LS=132 SG=ON
		report = new Idcpe006Report();
		report.setPageSize(60);
		report.setLineSize(132);
		// RELATORIO

		idcpe006A.receberTela(false, result);
		if (!sessao.getSisgsisp().getOperacao().equals("CES")) {
			funcoes.sissm001(result, sessao);
		}

		funcoes.tabssup2(sessao);
		if (!funcoes.camret.equals("")) {
			idcpe006A.enviarMensagem(funcoes.camret, funcoes.msgret);
			sessao.setAtributo("Idcpe006", this);
			result.include("idcpe006A", idcpe006A);
			idcpe006A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		}

		if (!UtilBean.funcao.equals(UtilBean.ctt_processa)) {
			idcpe006A.enviarMensagem(null, "");
			sessao.setAtributo("Idcpe006", this);
			result.include("idcpe006A", idcpe006A);
			idcpe006A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		}

		if (!sessao.getSisgsisp().getOperacao().equals("CES")) {
			funcoes.sissm001(result, sessao);
			sessao.setAtributo("Idcpe006", this);
			result.include("idcpe006A", idcpe006A);
			idcpe006A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		}

		if (!UtilBean.validarMascara(idcpe006A.getDatini(), "yyyyMMdd")) {
			idcpe006A.enviarMensagem("operacao", "");
			sessao.setAtributo("Idcpe006", this);
			result.include("idcpe006A", idcpe006A);
			idcpe006A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		}

		if (idcpe006A.getAdt() < 1998) {
			idcpe006A.enviarMensagem("adt", "");
			sessao.setAtributo("Idcpe006", this);
			result.include("idcpe006A", idcpe006A);
			idcpe006A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		}

		if (!UtilBean.validarMascara(idcpe006A.getDatfim(), "yyyyMMdd")) {
			idcpe006A.enviarMensagem("dfi", "");
			sessao.setAtributo("Idcpe006", this);
			result.include("idcpe006A", idcpe006A);
			idcpe006A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		}

		if (idcpe006A.getAfi() < 1998) {
			idcpe006A.enviarMensagem("afi", "");
			sessao.setAtributo("Idcpe006", this);
			result.include("idcpe006A", idcpe006A);
			idcpe006A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		}

		if (idcpe006A.getDatini() > idcpe006A.getDatfim()) {
			idcpe006A.enviarMensagem("dfi", "");
			sessao.setAtributo("Idcpe006", this);
			result.include("idcpe006A", idcpe006A);
			idcpe006A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		}

		report.setDtini(idcpe006A.getDatini());
		report.setDtini((int) funcoes.sissd002(report.getDtini()));
		report.setDtfim(idcpe006A.getDatfim());
		report.setDtfim((int) funcoes.sissd002(report.getDtfim()));
		jCont = 0;
		report.setJcont(0);
		detalhe();
		rodape();
		// report.gravaRelatorio(1);
		return report.imprimir();
		// UtilBean.mensagemTexto("  "
		// "* PRODAMAR EMPRESA DE PROCESSAMENTO DE DADOS DO MARANHAO S.A."
		// "Pagina: " *PAGE-NUMBER(EMF)
		// "* SECRETARIA DE SEGURANCA PUBLICA - SHOPPING DO CIDADAO" "DATA..: "
		// idcpe006A.getDataCorrente()
		// "* INSTITUICAO DE IDENTIFICACAO CIVIL E CRIMINAL" "IDCPE006"
		// "* RELATORIO DE RG EMITIDOS NO SHOPPING CIDADAO " "PERIODO: "
		// idcpe006A.getDtini() " -" idcpe006A.getDtfim() "USUARIO: "
		// idcpe006A.getJusuario() "-" "REG. GERAL." "NUM. DOCUM."
		// "NOME DO INDIVIDUO" "DAT. EMISS" "HOR. EMI" "MAT.FUN" "-");
		// RELATORIO
		//sessao.setAtributo("Idcpe006", this);
		//result.include("idcpe006A", idcpe006A);
		//if (!result.used()) {
			//idcpe006A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
		//}
	}

	private void detalhe() throws ParseException, JRException {
		if (idcpe006A.getJusuario() != 0) {
			while (vwEmissao.leituraDataEmissaoFaixaMatriculaFuncTipReg(idcpe006A.getDatini(), idcpe006A.getDatfim(), idcpe006A.getJusuario(), 1)) {
				dados();
			}
			vwEmissao.fecha();
		} else {
			while (vwEmissao.leituraDataEmissaoFaixaTipReg(idcpe006A.getDatini(), idcpe006A.getDatfim(), 1)) {
				dados();
			}
			vwEmissao.fecha();
		}

	}

	private void dados() throws ParseException, JRException {

		report.setJnomeide(vwEmissao.getNomeIdent());
		report.setDidemiDatemi(vwEmissao.getDataEmissao());
		report.setDidemiHoremi(vwEmissao.getHoraEmissaoCarteira());
		report.setDidemiMatfun(vwEmissao.getMatriculaFunc());
		report.setDidemiNserie(vwEmissao.getNumeroSerieRg());
		report.setDidemiRegger(vwEmissao.getRegGeralEmitido());
		report.setJusuario(idcpe006A.getJusuario());
		report.gravaRelatorio(2);
		// RELATORIO
		jCont++;
		report.setJcont(jCont);
	}

	private void rodape() throws ParseException, JRException {
		report.gravaRelatorio(3);
		// RELATORIO
	}

	private void restaurarEstados(Idcpe006A pidcpe006A) {
		this.idcpe006Anterior = (Idcpe006) sessao.getAtributo("Idcpe006");
		if (pidcpe006A != null) {
			idcpe006A = pidcpe006A;
		} else {
			idcpe006A = this.idcpe006Anterior.idcpe006A;
		}
		idcpe006A.setSessao(sessao);
		this.faseproc = this.idcpe006Anterior.faseproc;
	}
}
